package com.fengkai.filepost.pdfoutstream.test.ODsolutions;

import java.util.HashMap;
import java.util.Scanner;

/**
 * @author Fengkai
 * @creat 2023/4/17
 * 静态扫描快速识别源代码的缺陷，静态扫描的结果以扫描报告作为输出：
 * <p>
 * 文件扫描的成本和文件大小相关，如果文件大小为 N ，则扫描成本为 N 个金币
 * 扫描报告的缓存成本和文件大小无关，每缓存一个报告需要 M 个金币
 * 扫描报告缓存后，后继再碰到该文件则不需要扫描成本，直接获取缓存结果
 * 给出源代码文件标识序列和文件大小序列，求解采用合理的缓存策略，最少需要的金币数。
 * <p>
 * 输入
 * 第一行为缓存一个报告金币数 M,1≤M≤100
 * 第二行为文件标识序列：F 1 F_1F
 * 第3行为文件大小序列：S 1 S_1S
 * <p>
 * 输出描述
 * 采用合理的缓存策略，需要的最少金币数
 */
public class SonarCost {
    public static void main (String[] args) {
        Scanner scanner = new Scanner(System.in);
        int cacheCost = Integer.parseInt(scanner.nextLine());
        String s = scanner.nextLine();
        String[] split = s.split(" ");
        int[] codes = new int[split.length];
        int[] sizes = new int[split.length];
        for (int i = 0; i < codes.length; i++) {
            codes[i] = Integer.parseInt(split[i]);
        }
        for (int i = 0; i < sizes.length; i++) {
            sizes[i] = scanner.nextInt();
        }
        System.out.println(sonarCost(sizes, codes, cacheCost));
    }

    public static int sonarCost (int[] sizes, int[] codes, int cacheCost) {
        int result = 0;
        HashMap<Integer, Integer> codeCount = new HashMap<>();//每种文件出现的次数
        HashMap<Integer, Integer> codeCost = new HashMap<>();//每种文件扫描成本
        for (int i = 0; i < codes.length; i++) {
            Integer orDefault = codeCount.getOrDefault(i, 0);
            codeCount.put(i, orDefault + 1);
            codeCost.putIfAbsent(i, sizes[i]);
        }
        for (Integer integer : codeCost.keySet()) {
            int min = Math.min(codeCount.get(integer) * codeCost.get(integer), codeCost.get(integer) + cacheCost);
            result += min;
        }
        return result;
    }

}
